package java6681.lesson09;

import java.io.File;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Scanner;

/**
 * @author Junichiro
 * @description 用字符流写文本文件
 * @date 2021-05-08 19:59
 **/

public class WriteFile6681 {
    static String errMsg = "";
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入文件名：");
        String filename = input.nextLine();
        // 调用write6681()向文件中输出字符串，并返回字节数
        // 在控制台上输出向文件中写入的字节数
        System.out.println("已向文件"+filename+"中写入"+write6681(filename)+"字节");
    }

    private static long write6681(String filename) {
        File target = new File(filename);
        String path = target.getParent();
        // 如果输入包含目录, 判断上级目录是否存在, 不存在则创建, 创建失败则显示错误信息 (比如输入的盘符不存在的情况)
        File parent = target.getParentFile();
        if(parent != null && !parent.exists()){
            if(!parent.mkdirs()){
                errMsg = "指定目录无法创建... ";
                return 0;
            }
        }
        // 在外面声明Writer变量, 以便后面finally中来关闭它
        Writer writer = null;
        try {
            writer = new FileWriter(target);
            System.out.println("请逐行输入要写入文件的内容, 直到输入end结束...");
            while (true) {
                // 循环输入文本, 向文件中写入, 输入一行写一行, 直到输入end时结束
                String input = new Scanner(System.in).nextLine();
                if ("end".equals(input.trim().toLowerCase())) {
                    break;
                }
                writer.write(input + "\r\n");
            }
        } catch (IOException e) {
            // 如果写入过程中出现错误, 则保存错误信息, 并且返回0
            errMsg = e.getMessage();
            return 0;
        } finally {
            // 最后如果writer的指向不为null, 就关闭它 (可能上面过程中给writer赋值时错误, 这时候还close就会报错)
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    errMsg = "字符流关闭失败...";
                }
            }
        }
        return target.length();
    }
}

//private static long write6681(String filename) {
//        //【注意】请使用try…catch…finally进行异常处理，并释放资源
//        // 步骤1：确定输出的文件（目的地）
//        // 如果filename中包含路径，必须确保路径已存在
//        File file = new File(filename);
//        // 步骤2：创建指向文件的字符输出流
//        FileWriter in = null;
//        String text = null;
//        try {
//            in = new FileWriter(file);
//            // 步骤3：写数据
//            // 输入一行写一行
//            System.out.println("逐行输入要保存到文件中的文本，直到输入end结束");
//            Scanner input = new Scanner(System.in);
//            boolean flag = true;
//            while (flag) {
//                text = input.nextLine();
//                if (text.equalsIgnoreCase("end")) {
//                    flag = false;
//                }else {
//                    in.write(text+"\r\n");
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            // 步骤4：关闭
//            if (in != null) {
//                try {
//                    in.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        // 返回文件的字节数
//        return file.length();
//    }
//【注意】请使用try…catch…finally进行异常处理，并释放资源
// 步骤1：确定输出的文件（目的地）
// 如果filename中包含路径，必须确保路径已存在
// 步骤2：创建指向文件的字符输出流
// 步骤3：写数据
// 输入一行写一行
// 步骤4：关闭
// 返回文件的字节数